home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1993
/
Internet Info CD-ROM (Walnut Creek) (1993).iso
/
inet
/
internet-drafts
/
draft-ietf-appleip-kip-gateway-00.txt
< prev
next >
Wrap
Text File
|
1993-07-08
|
80KB
|
2,242 lines
DRAFT Philip Budne
Shiva Corporation
July 1993
KIP AppleTalk/IP Gateway Functionality
$Revision: 1.33 $
July 6, 1993
1. Status of this Memo
This DRAFT documents the functionality of the Stanford ``KIP''
AppleTalk/IP ``Gateway'' (also called the ``SEAGate code'', ``IP-
Ether/AppleTalk Gateway'', or ``Croft Gateway'').
This draft document will be submitted to the RFC editor as an
Informational Document.
This document is an Internet Draft. Internet Drafts are working
documents of the Internet Engineering Task Force (IETF), its Areas,
and its Working Groups. Note that other groups may also distribute
working documents as Internet Drafts.
Internet Drafts are draft documents valid for a maximum of six
months. Internet Drafts may be updated, replaced, or obsoleted by
other documents at any time. It is not appropriate to use Internet
Drafts as reference material or to cite them other than as a
``working draft'' or ``work in progress''.
Please check the I-D abstract listing contained in each Internet
Draft directory to learn the current status of this or any other
Internet Draft.
This document expires December 31, 1993. Distribution of this memo
is unlimited.
This memo was started as an effort to describe ``IPTalk'' for the
AppleTalk-IP Working Group of the Internet Engineering Task Force
(IETF). It became apparent that since no protocol standard or
DRAFT KIP AppleTalk/IP Gateway July 1993
description existed that implementation specific information was
unavoidable. KIP is the prototypical AppleTalk/IP Gateway
implementation and is available in source form. KIP's functionality
forms the basis for many commercial products available today.
2. History
Following the introduction of the Macintosh computer in 1984, Apple
donated many units to universities where Ethernet and TCP/IP were the
primary networking technologies. The Macintosh had clear advantages
for text processing applications, including an easy to use user
interface, bit-mapped display, and a built-in network adaptor for the
sharing of laser printers. However, it was equally clear that the
absence of connectivity to existing large computing systems was a
serious limitation. Work began at several large universities (notably
Dartmouth, Stanford and CMU) to provide gateways and client software.
The original ``Stanford Ethernet Applebus Gateway'' was created at
Stanford University in 1985 by Bill Croft and was known as the
``SEAGate''. The hardware consisted of off-the-shelf Multibus
components; a ``SUN 1'' 68000 CPU card, an Interlan NI3210 Ethernet
card, and a simple homebrew Zilog 8530 SCC based ``AppleBus''
interface. The SEAGate source code and hardware documents were
freely available to members of the Internet community. The initial
version provided simple transport of encapsulated IP datagrams from
AppleTalk-based Macintosh computers to Ethernet based IP hosts. Later
versions added encapsulation of AppleTalk in IP and full AppleTalk
routing capabilities. The SEAGate was configured by editing include
files compiled into the gateway code, and was downloaded over a
serial port on the CPU card.
The Kinetics FastPath was created using this technology in mid-1985
and consisted of a 10Mhz 68008 with 48K of battery backed SRAM, an
i82586 and a Zilog 8530 SCC. A PROM provided for download over
LocalTalk and a library of buffer management and LocalTalk I/O
routines for use by the downloaded application.
The SEAGate code was ported to the FastPath and continued to evolve,
and was renamed ``KIP'' for the ``Kinetics IP'' Gateway. The name
``KIP'' is used in this document only in reference to the gateway
software. Unless otherwise noted, all descriptions refer to the June
1988 (06/88) release of KIP.
3. Terminology
The KIP ``Gateway'' implements protocols for encapsulation of IP
datagrams [RFC-791] in DDP for transmission over AppleTalk [Sidhu90]
internets (IP in DDP), and encapsulation of DDP datagrams in UDP
Budne Expires December 31, 1993 [Page 2]
DRAFT KIP AppleTalk/IP Gateway July 1993
[RFC-768] for transmission over IP internets (DDP in UDP). Both have
been called ``KIP'' encapsulation; IP in DDP (herein called DDP/IP)
has also been called ``Dartmouth encapsulation'', ``MacIP'' and
``Croft encapsulation'' while DDP in UDP (herein called UDP/DDP) has
been called ``UDPTalk'', ``IPTalk'', ``AppleTalk in IP'', ``AppleTalk
over UDP'', and ``IP tunneling''. KIP can speak both EtherTalk Phase
1 and UDP/DDP on Ethernet. This capability has been called
``doubletalk''.
The primary existing UDP/DDP host implementation of AppleTalk is the
Columbia AppleTalk Package (CAP) for Un*x systems. All references to
CAP are for Columbia Version 5.0 (using abkip.c).
The KIP sources use the historical terms ``AppleBus'' and
``AppleTalk'' in reference to the ``LocalTalk'' physical medium, as
KIP pre-dates the introduction EtherTalk (and thus the use of the
name AppleTalk for the protocol family rather than the medium). The
term ``Kbox'' is used here to refer to a FastPath running KIP (or any
functionally similar hardware and software).
All constants are in decimal unless otherwise noted.
The following ``C'' type definitions apply to all data structures and
code:
typedef unsigned char u_char; /* 8 bit ordinal */
typedef unsigned short u_short; /* 16 bit ordinal */
typedef unsigned long u_long; /* 32 bit ordinal */
typedef long iaddr_t; /* internet address */
4. UDP/DDP encapsulation
This section describes the algorithms and data structures used by KIP
to implement UDP/DDP encapsulation.
4.1. Motivation
UDP/DDP encapsulation was developed before Apple established a
standard method for the transmission of AppleTalk over Ethernet. One
of the primary strengths (and weaknesses) of UDP/DDP is that it uses
static, centrally administered routing information for the UDP/DDP
backbone, eliminating the background chatter generated by RTMP and
ZIP. In addition one gains the ability to use the large
infrastructure of existing IP internets to transport AppleTalk over
long distances.
Budne Expires December 31, 1993 [Page 3]
DRAFT KIP AppleTalk/IP Gateway July 1993
IP networks on which UDP/DDP routers and endnodes are homed are
assigned AppleTalk network numbers. This distinguishes UDP/DDP from
a strict point-to-point ``tunneling'' model in that endnodes can be
implemented and it allows complete interconnectivity between routers
without a quadratic number of links.
Because of the static nature of UDP/DDP routes, partial (non-
transitive) network connectivity can be engineered (ie; A can see B
and C, but B and C cannot see each other).
4.2. UDP/DDP network numbers
KIP and CAP configuration files usually represent AppleTalk network
numbers as a dotted pair of decimal octets, thus network 258 is
represented as 1.2. AppleTalk network numbers for UDP/DDP networks
are chosen manually, and are arbitrary; In fact, KIP does not learn
from ``seed'' routers at all, and all AppleTalk port network numbers
must be manually configured. Each IP network which is to contain
UDP/DDP hosts (ie; CAP clients and servers) must be assigned a
UDP/DDP AppleTalk network number.
A common convention for the representation of 8 bit subnets of a
class B network is to put the subnet number in the low octet and an
arbitrary constant in the top octet. If the subnet is also used for
EtherTalk a different high octet is used.
IP subnet UDP/DDP net EtherTalk net
_________________________________________
129.2.50.0 55.50 57.50
129.2.100.0 55.100 57.100
129.2.200.0 55.200 57.200
As on any Phase 1 network, there can only be 254 hosts on a UDP/DDP
network. Only the first 254 hosts (low octet equal to 1 through 254)
of a network with more than 8 bits of host number are eligible to
participate in UDP/DDP.
IP (sub-)networks with more than 254 hosts can be represented as
several UDP/DDP networks at the cost of redundant NBP lookup
broadcast traffic.
4.3. UDP/DDP Node numbers
Each CAP UDP/DDP host must be associated with one UDP/DDP network
(even if the underlying IP host is multi-homed). The AppleTalk node
number of a UDP/DDP host is always the low order octet of the host's
IP address on the connected UDP/DDP network.
Budne Expires December 31, 1993 [Page 4]
DRAFT KIP AppleTalk/IP Gateway July 1993
4.4. UDP/DDP Address resolution
Since UDP/DDP encapsulation converts AppleTalk addresses to IP
addresses algorithmicly, no additional Address Resolution Protocol is
required.
4.5. UDP/DDP packet format
UDP/DDP packets are encapsulated in UDP with the IP destination
address and UDP source and destination ports calculated based on
route type (see next section).
Each UDP/DDP packet contains a dummy three byte LAP header
(destination, source and type) the same as LocalTalk and EtherTalk
Phase 1. This has the helpful effect of assuring alignment of the
encapsulated data (otherwise the DDP header would cause odd
alignment). UDP/DDP packets output by KIP always have a LAP
destination of 250 and a LAP source of 206 (which spells ``FACE'' in
a hex dump).
Packets originated by CAP have the source and final destination nodes
numbers equal to the DDP source and destination node (regardless of
the destination network)!! KIP and CAP only send packets of LAP type
2 (long DDP).
KIP ignores the LAP header on input, and a long DDP packet must
follow.
4.6. UDP/DDP Routing
The following ``C'' data structure is used by KIP to internally
represent all AppleTalk routes:
struct aroute {
u_long node; /* next hop/IR: AT node OR IP addr */
u_short net; /* atalk net number, 0 if unused */
u_char flags; /* flags */
u_char hops; /* number of hops to this net */
u_char zone; /* zone index + 1 */
u_char age; /* age of entry in 20 second ticks */
u_char port; /* index of port route came in on */
};
Budne Expires December 31, 1993 [Page 5]
DRAFT KIP AppleTalk/IP Gateway July 1993
/* flag fields */
#define arouteTYPE 0xe0 /* up to 8 types */
#define arouteCore 0x10 /* 'node' is a "core" gateway */
#define arouteAA 0x08 /* this entry received via AA */
#define arouteSUBTYPE 0x03 /* TYPE specific information */
/* Kbox Type */
#define arouteKbox 0x80 /* 'node' is IP addr of a Kbox */
# define arouteEtalk 0x01 /* 'net' is for Kbox EtherTalk */
/* Net Type */
#define arouteNet 0x40 /* IP net allows directed cast */
# define arouteBMask 0x03 /* directed bcast format mask */
/* Host Type */
#define arouteHost 0x20 /* IP rebroadcast host */
# define arouteAsync 0x02 /* virtual async atalk net */
Note:
The `arouteTYPE' field should be treated as an
enumeration despite the assignment of separate bits for
the existing values.
Similarly, the `arouteSUBTYPE' bits have not always been
recognized as `arouteTYPE' specific.
Finally, the `arouteCore' flag should be associated only
with ``Kbox'' routes.
The KIP AppleTalk routing table contains three types of routes;
``Direct'', ``Local'', and ``IP''.
4.6.1. Direct
The routes for the directly connected LocalTalk and EtherTalk
networks have zero in their `hops', `node', and `flags' fields. The
first route in KIP's routing table is for the LocalTalk port, and the
third is for the EtherTalk port (if configured).
4.6.2. Local
For routes learned via RTMP on the LocalTalk or EtherTalk interfaces,
`node' is the AppleTalk node number of an AppleTalk router on the
Budne Expires December 31, 1993 [Page 6]
DRAFT KIP AppleTalk/IP Gateway July 1993
connected network, and `port' is the index of the associated
interface. The `flags' field is zero and the `hops' field is non-
zero.
4.6.3. IP
For UDP/DDP routes (destinations that will be reached by sending the
AppleTalk DDP packet encapsulated in UDP), member `node' in the
`aroute' struct is the IP address of another Kbox or an IP network.
The flags field contains information on the type of ``IP'' route.
AppleTalk ``IP'' routes come in four flavors; ``Net'', ``Host'',
``Kbox'', and ``Async''. ``Net'', ``Host'', and ``Async'' routes all
reach clients on (or connected to) IP hosts (which are not capable of
speaking ``native'' AppleTalk), while ``Kbox'' routes represent
native AppleTalk (LocalTalk and EtherTalk) networks reached by
through IP networks.
4.6.3.1. Net
If the `arouteTYPE' bits of the `flags' field are equal to
`arouteNet', the AppleTalk network `net' is a UDP/DDP net coresident
with an IP network that can be reached with directed broadcasts. The
`arouteBMask' bits of the `flags' field of the `aroute' struct are
the number of low order octets (zero to three) of ones (hex `0xff')
to logically OR with the network number in the `node' field to
produce the (directed) broadcast address. The second route in KIP's
routing table is a ``Net'' route to the directly connected
Ethernet/IP network.
4.6.3.2. Host
If the `arouteTYPE' bits of the `flags' field are equal to
`arouteHost', the AppleTalk network `net' is a UDP/DDP net coresident
with an IP network that cannot be reached by directed broadcasts.
The `node' field of the `aroute' struct is the address of a
``rebroadcast host'' which can broadcast packets on the destination
network. KIP 06/88 does not check the ``subtype'' bits (See below
section on ``Async'' routes).
4.6.3.3. Kbox
If the `arouteTYPE' bits of the `flags' field are equal to
`arouteKbox', this AppleTalk network is reached by sending the DDP
datagram encapsulated in UDP to the router located at address `node'.
``Kbox'' routes can refer to either ``local'' routes learned by other
gateways via RTMP and distributed by the ``core'' gateway mechanism,
or routes downloaded from the AppleTalk Administrator (AA) host in
Budne Expires December 31, 1993 [Page 7]
DRAFT KIP AppleTalk/IP Gateway July 1993
the initial route table. The Un*x AA server implementation
distributed with KIP is `atalkad'. The `arouteEtalk' bit in the
`arouteSUBTYPE' field exists as internal information used by
`atalkad' to differentiate LocalTalk and EtherTalk networks for
configuration purposes, and is not used by KIP at all (but is
nonetheless passed to, and saved by KIP).
4.6.3.4. Async
``Async'' is a recent extension which allows datagrams for a virtual
AppleTalk network to be forwarded to a single IP host with the UDP
port demultiplexed by DDP destination node number. This allows the
gateway to deliver DDP datagrams for each possible node on the Async
network to a different Un*x user process with no intermediary.
``Async'' networks are implemented as a subtype of ``Host'' networks,
with `arouteSUBTYPE' set to `arouteAsync'. Implementations which do
not understand ``Async'' routes will treat them as ``Host'' routes,
with undesirable results.
4.7. IP Route Algorithms
In ``Kbox'', ``Net'', and ``Host'' routes the destination UDP port is
demultiplexed based on the destination DDP socket (except for DDP
broadcasts to ``Host'' networks). This allows the gateway to deliver
DDP datagrams for each possible DDP socket to a different Un*x user
process with no intermediary.
The following table shows how the `aroute' type and the DDP
destination node select algorithms to calculate the UDP destination
port and IP destination address.
IP dest addr algorithm / UDP dest port algorithm.
IP Route Type DDP unicast DDP broadcast
___________________________________________
Net Alg A/Alg P Alg B/Alg P
Host Alg A/Alg P Alg C/Alg Q
Kbox Alg C/Alg P Alg C/Alg P
Async Alg C/Alg R Alg C/Alg S
The UDP source port is always calculated by applying Algorithm P to
the ddp source socket.
In the following code fragments the variable `ddp' is of type `struct
DDP' and describes the long DDP header of the outgoing AppleTalk
Budne Expires December 31, 1993 [Page 8]
DRAFT KIP AppleTalk/IP Gateway July 1993
packet;
struct DDP {
...
u_short dstNet; /* dest net */
u_short srcNet; /* src net */
u_char dstNode; /* dest node */
u_char srcNode; /* src node */
u_char dstSkt; /* dest socket */
...
} ddp;
The variable `ar' is a pointer to the `aroute' struct for the DDP
destination net in the AppleTalk routing table.
4.7.1. IP destination address algorithms
The following are the algorithms for calculating the IP destination
host address of the UDP/DDP datagram expressed in ``C''.
The variable `ip' is of type `struct ip' and describes the IP header
of the outgoing IP datagram;
struct ip {
...
iaddr_t ip_src; /* IP source address */
iaddr_t ip_dst; /* IP dest address */
} ip;
4.7.1.1. Algorithm A
Algorithm A is used to deliver unicast (non-broadcast) packets on
``Host'' and ``Net'' networks directly to the destination host on a
UDP/DDP network. The IP destination is formed by taking the high 24
bits from `node', and the low 8 bits from the DDP destination node
number.
ip.ip_dst = (ar->node & ~0xff) | ddp.dstNode;
Budne Expires December 31, 1993 [Page 9]
DRAFT KIP AppleTalk/IP Gateway July 1993
4.7.1.2. Algorithm B
Algorithm B is used to broadcast packets to ``Net'' networks, relying
on directed broadcast delivery. The IP destination is formed using
the `node' field and as many low order octets of ones as specified by
the `arouteBMask' field of `flags'. If the destination AppleTalk
network is the connected Ethernet UDP/DDP network, the configured IP
broadcast address (member `ipbroad' in the configuration structure)
is used as the IP destination.
u_long ipbroadtypes[] = { 0, 0xff, 0xffff, 0xffffff };
/* directly connected UDP/DDP net? */
if( ddp.destNet == ifie.if_dnet ) {
/* use configured IP broadcast */
ip.ip_dst = conf.ipbroad;
}
else {
/* create directed broadcast */
ip.ip_dst = ar->node |
ipbroadtypes[ ar->flags & arouteBMask ];
}
4.2 BSD style (zero-fill) broadcast addresses (for networks with 8
bits of host) can be generated by specifying zero octets of ones.
Networks that cannot be reached with broadcast addresses that do not
have a integral number of low-order one-filled octets cannot use
``Net'' routes, and must use ``Host'' routes (see below).
4.7.1.3. Algorithm C
Algorithm C is used for delivery of broadcasts on ``Host'' networks,
and all packets on ``Kbox'' and ``Async'' networks to a specific host
address. The IP destination is the IP host specified in the `node'
(next IR) field .
ip.ip_dst = ar->node;
Budne Expires December 31, 1993 [Page 10]
DRAFT KIP AppleTalk/IP Gateway July 1993
4.7.2. UDP destination port algorithms
The following are the algorithms for calculating the UDP destination
port of the UDP/DDP datagram expressed in ``C'', using the following
structure for the output UDP header;
struct udp {
u_short uh_src; /* source port */
u_short uh_dst; /* destination port */
...
} udp;
4.7.2.1. Algorithm P
Algorithm P is used for delivery of all packets on ``Net'' and
``Kbox'' networks and unicast packets on ``Host'' networks. Packets
for each possible DDP socket are directed to a different UDP port on
the destination host.
``Static'' or ``Well Known'' DDP sockets (those below 128) originally
used a UDP port base of 768 (300 hex), however in April of 1988 the
NIC reserved ports 201 through 208 (a port base of 200) for use by
KIP [RFC-1060]. UDP ports 768 and 200 are never used, since use of
DDP socket zero is illegal. See the ``Discussion'' section below.
The UDP port range used for static DDP sockets is configured via the
`aaCONF' packet (ie; from `atalkatab'). The UDP port range base used
for ``dynamic'' DDP sockets is fixed at 16384 (4000 hex).
Budne Expires December 31, 1993 [Page 11]
DRAFT KIP AppleTalk/IP Gateway July 1993
#define ddpWKSBase 200 /* start of NIC WKS range */
#define oddpWKSBase 768 /* start of old WKS range */
#define ddpNWKSBase 16384 /* non WKS... */
/* "well known" (ie; static) socket number?? */
if( ddp.dstSkt < 128 ) {
if( conf.startddpWKS == 0 ) {
/* no WKS range configured
* be backwards compatible
*/
startddpWKS = oddpWKSBase;
}
else {
/* usually ddpWKSBase (200) */
startddpWKS = conf.startddpWKS;
}
udp.uh_dport = ddp.dstSkt + startddpWKS;
}
else /* not a WKS, use NWKS port range */
udp.uh_dport = ddp.dstSkt + ddpNWKSBase;
4.7.2.2. Algorithm Q
Algorithm Q is used to deliver DDP broadcasts for ``Host'' networks
to a ``rebroadcast'' server for local broadcast or selective directed
delivery.
#define rebPort 902
udp.uh_dport = rebPort;
4.7.2.3. Algorithm R
Algorithm R is used to deliver DDP unicast packets for ``Async''
networks to the async server host based on the DDP destination node.
This is done so that each dialin user running the `async' program can
receive packets destined for their node without additional handling
on the server host.
#define aaBasePort 0xAA00 /* Async AppleTalk base port */
udp.uh_dport = aaBasePort + ddp.dstNode;
Budne Expires December 31, 1993 [Page 12]
DRAFT KIP AppleTalk/IP Gateway July 1993
4.7.2.4. Algorithm S
Algorithm S is used to deliver DDP Broadcasts for ``Async'' networks
to a single UDP port so that the `asyncad' daemon can forward the
packet to all registered `async' dialin users on the Un*x host.
#define aaBroadPort 750 /* aabroad in /etc/services */
udp.uh_dport = aaBroadPort;
4.7.3. Discussion
The primary benefit realized by the DDP/UDP port mapping expressed in
Algorithm P is the efficient implementation of AppleTalk on systems
with a system level UDP implementation and no system level AppleTalk
(ie; Vanilla BSD Un*x), as system level UDP port demultiplexing is
used to deliver the DDP packets directly to the user process.
Creating this one-to-one relationship between DDP sockets and UDP
ports on the UDP/DDP host is feasible because the size of the DDP
socket space is much smaller than the UDP port space (2^8 vs. 2^16).
Furthermore the UDP ports in the WKS and NWKS ranges can be used for
other purposes, but only those ports can be used for UDP/DDP
applications.
However it is difficult to implement a UDP/DDP AppleTalk interface on
a system with both formalized UDP and DDP layers (ie; a UDP/DDP
``adev'' for a Mac using ``MacTCP 1.0''). A similar difficulty is
seen implementing a UDP/DDP AppleTalk router in a user process on a
system with a typical system level UDP implementation (ie; Un*x), as
the router process has to listen on and send from 254 different UDP
ports.
Ed Moy of UCB has done work on a version of IPTalk that uses only one
UDP port for transmissions between hosts.
4.8. KIP UDP/DDP input processing
When KIP receives UDP input on a port in either the ``Well Known'' or
``Not Well Known'' DDP socket range, it strips the UDP and pseudo LAP
headers, and passes the (long) DDP packet to the regular DDP input
layer.
4.9. KIP Route Aging
KIP ages all AppleTalk routes every 20 seconds. Local (RTMP) routes
are kept for two aging periods, while learned IP routes are kept for
Budne Expires December 31, 1993 [Page 13]
DRAFT KIP AppleTalk/IP Gateway July 1993
16 periods. Initial IP routes (from atalkad), and routes for directly
connected networks are never aged.
4.10. CAP routing
Each CAP client keeps the IP address, DDP network and node numbers of
the last host from which it received a UDP/DDP packet. This means
that CAP is able to return some packets without sending them first to
a local gateway (in violation of Phase 1 rules)!! If on output the
DDP destination net and node both match the cached information, the
packet is sent to the cached IP address, otherwise the packet is
routed to a single statically configured local gateway.
4.11. CAP socket assignment
When a CAP client or server wishes to obtain a dynamic DDP socket it
must search the UDP port range associated with the DDP ``Not Well
Known'' socket range for a free local UDP port. Since the UDP ports
in both the old and new ``Well Known'' (static) ranges are below
1024, only processes executing as ``super user'' may open them.
Name Information Table (NIT) maintenance for CAP hosts is implemented
in a single process, by a program named `atis' (the appletalk
information server). `Atis' listens on the Name Information Socket
(NIS) for `LkUp' requests and sends `LkUp-Reply' packets. CAP
servers must send special register and unregister requests to `atis'
to modify the NIT.
`Atis' also listens on DDP socket 4 for AppleTalk Echo Protocol (AEP)
packets, and will send an `echoReply' for each `echoRequest'
received.
4.12. CAP Zones
Each CAP host is staticly configured with a zone name, and `atis'
will only answer NBP `LkUp''s in its own zone. NBP `LkUp''s sent by
KIP always include the zone (never ``*''). See section on the magic
`ALL' zone.
4.13. AppleTalk Administration (AA) packets
KIP is downloaded with a configuration that specifies only it's own
IP address, a default router and the address of an administrator host
which will supply additional configuration information. KIP receives
this configuration information and exchanges routing information on
UDP port 901 (the `aaPort'). The packets used are called AppleTalk
Administration, or ``AA'' packets. KIP will only accept AA packets
Budne Expires December 31, 1993 [Page 14]
DRAFT KIP AppleTalk/IP Gateway July 1993
sent from it's configured AppleTalk Administrator host (member
`ipadmin' in configuration), IP debug host (member `ipdebug' in
configuration), or from any ``Kbox'' marked as from the AA host in
the `aroute' table. Each packet must have a UDP source port of 901.
KIP relies exclusively on the AA protocol to distribute routing
information for UDP/DDP networks; RTMP packets are never exchanged
over UDP/DDP networks. All AA packets have the following structure:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: aaMagic (0xFF068030) :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: opcode : flags : byte count of stuff :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP address of sender (never checked) :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: :
/ stuff: /
/ config info or route tuples /
/ (up to 512 octets) /
: :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The data portion of the packet (member `stuff') is limited to 512
octets to avoid IP fragmentation.
Here are the valid `opcode' values;
aaCONF 1 Configuration request/reply
aaROUTEI 2 Initial routes from AA
aaROUTE 3 Route update
aaROUTEQ 4 Route update and query
aaRESTART 5 Force restart
aaZONE 6 Initial zones from AA (obs)
aaZONEQ 7 DDP ZIP over AA
Two recent, commonly implemented extensions (originated by the
University of Melbourne) are:
aaROUTEM 32 More routing info
aaROUTER 33 Request routing info
Budne Expires December 31, 1993 [Page 15]
DRAFT KIP AppleTalk/IP Gateway July 1993
The following are AA protocol extensions which are not widely
implemented (if at all), and will not be discussed further;
A CMU extension:
aaROUTEIS 8 Short initial route table
LBL-KIP extensions (also in K-STAR 9.1);
aaREBOOT 9 Force code download (via BOOTP)
aaRESET 10 Reset code and config
Extensions used by University of Melbourne;
aaPROXY 62 NBP Proxy ARP table
aaPROXYQ 63 NBP Proxy ARP table request
Extensions proposed by Karen Frisa in ``IPTalk routing for AppleTalk
Phase 2'' (7/27/90), but never implemented;
aaROUTERANGE 9 Table update with ranges
aaROUTERANGEQ 10 Table update and query with ranges
Budne Expires December 31, 1993 [Page 16]
DRAFT KIP AppleTalk/IP Gateway July 1993
4.13.1. `aaCONF' packet
On startup KIP sends a minimum length (12 byte) `aaCONF' packet to
the ``AA'' host as a configuration request. The AA host then replies
with a full configuration `conf' structure in the data portion of an
`aaCONF' packet;
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP broadcast address * :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP name server ** :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP debug host :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP file server ** :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[0] ** :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[1] ** :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[2] ** :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[3] ** :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: EtherTalk net : start ddp WKS UDP port range :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: flags :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: # of static clients : # of dynamic clients :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: LocalTalk net : UDP/DDP net :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: :
: spare :
: (was once zone info) :
: :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Note:
Entries with * are used by KIP and passed to DDP/IP
clients via ``IPGP''. Entries with ** are NOT used by
KIP and are passed to DDP/IP clients via ``IPGP''.
Budne Expires December 31, 1993 [Page 17]
DRAFT KIP AppleTalk/IP Gateway July 1993
Values for `flags' (may be OR'ed together);
Flag Value Meaning
conf_stayinzone 1 No looking at other zones
conf_laserfilter 2 NBP LaserWriter filtering
conf_tildefilter 4 NBP Tilde filtering
4.13.2. Routing Tuples
`aaROUTEI', `aaROUTE', `aaROUTEQ', and `aaROUTEM' packets contain
routing tuples (called `arouteTuple''s) of the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP net or host :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: atalk net : flags : hops :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The `flags' field of the `arouteTuple' uses the same flags as the
`aroute' structure.
NOTE: This differs from RTMP in that it contains the explicit address
of the ultimate destination.
4.13.3. `aaROUTEI' packet
The AA host sends KIP an `aaROUTEI' packet to install an initial
(static) routing table. On receipt of an `aaROUTEI', KIP flushes all
routes marked as ``from AA'' (with the `arouteAA' flag set), and
inserts the enclosed routes into it's routing table marked as ``from
AA''.
The `atalkad route' command sends KIP an unsolicited `aaROUTEI'
packet.
On startup KIP sends a minimum length (12 byte) `aaROUTEI' packet as
a request every 60 seconds until a reply is received.
4.13.4. `aaROUTEQ' packet
Once a minute KIP sends an `aaROUTEQ' packet to a ``core'' gateway.
Core gateways are those Kboxes which appear in KIP's routing table as
``Kbox'' routes with the `arouteCore' flag set. The core gateways
are sent to in turn, round-robin. ``Core'' gateways send `aaROUTEQ'
Budne Expires December 31, 1993 [Page 18]
DRAFT KIP AppleTalk/IP Gateway July 1993
as well (KIP does not contain code to detect whether it is a ``core''
gateway or not), but a ``core'' gateway will skip it's own address.
The `aaROUTEQ' packet contains ``Kbox'' routes (with the gateway IP
address in the `node' field) for each AppleTalk route that the
gateway has learned via RTMP (those which qualify as ``Local''
routes).
On receipt of an `aaROUTEQ' KIP merges the routes into it's routing
table and replies with an `aaROUTE' packet containing ALL routes
which are not marked as ``from AA''.
4.13.5. `aaROUTE' packet
On receipt of an `aaROUTE' packet KIP merges the contained routes
into it's routing table.
4.13.6. `aaRESTART' packet
KIP will restart execution upon receipt of an `aaRESTART' packet.
The `atalkad boot' command sends an `aaRESTART' packet to each Kbox
in `/etc/atalkatab'.
4.13.7. `aaZONE' packet
`aaZONE' is an obsolete packet format used for zone information. KIP
06/88 does not send or process `aaZONE' packets. An empty `aaZONE'
packet was sent by KIP as a request, and returned with data by
`atalkad'.
The format of `aaZONE' packet data is a list of (2 byte) AppleTalk
network numbers terminated by a zero net number and followed by a
``pascal'' string (ie; string prefixed by a byte count byte) for the
zone. The packet is terminated by an network number of all ones (hex
`0xffff').
4.13.8. `aaZONEQ' packet
`aaZONEQ' packets contain regular DDP ZIP `Query' and `Reply'
packets.
KIP sends `aaZONEQ' packets containing ZIP `Query' requests to the AA
host for routes marked as ``from AA'' or to the IP address in the
`node' field of the route for routes learned via ``core'' gateways.
KIP and atalkad respond to `aaZONEQ' encapsulated Queries with ZIP
`Reply' packets inside a `aaZONEQ'.
Budne Expires December 31, 1993 [Page 19]
DRAFT KIP AppleTalk/IP Gateway July 1993
4.13.9. `aaROUTER' packet
This is a recent extension implemented in Rutgers KIP (RU-KIP) and
various commercial offerings. If the `flags' field in the AA packet
header of the `aaROUTEI' packet returned by the AA host is non-zero,
it is interpreted as a count of the total number of initial route
packets. The `flags' field of the AA packet header in an `aaROUTER'
packet is interpreted as an initial route packet ``serial number''.
Since the `aaROUTEI' packet contains the first 64 routes, the first
`aaROUTER' request contains the value one in the `flags' field.
4.13.10. `aaROUTEM' packet
This is a recent extension implemented in Rutgers KIP and various
commercial offerings. `Atalkad' sends the n-th additional initial
route packet in response to the `aaROUTER' request in an `aaROUTEM'
packet. RU-KIP increments its request serial number regardless of
the contents of the `flags' field in the incomming `aaROUTEM' AA
packet header.
4.14. Aroute input Processing
KIP uses the same code to integrate new routes regardless of whether
they were acquired using the AA protocol or RTMP. Of particular note
is that hopcount values are incremented on input, and that worse-cost
changes are only accepted if the new destination node matches the
currenly saved `node' value. Thus the AA protocol is being treated
as a distance vector routing protocol.
However, distance vector routing systems depend on the fact that
routing tuple hopcounts reflect actual distance because the routing
data traverses the same path as the network data. This is not true
for the AA protocol; Data packets are sent directly without
traversing the core gateways through which the routing data was
passed, so the hopcounts of routes obtained from core gateways are
too high.
In the presense of more than one core gateway, the hopcount of a core
gateway learned route will often be inflated owing to the route being
passed between core gateways since the ``destination'' host will be
the same, the longer route will be accepted. With two or more core
gateways, routes can take more than an hour to die.
Because the AppleTalk distance from any one ``Kbox'' to another is
always one hop (the actual number of intervening IP gateways cannot
be detected) the AppleTalk cost should be propogated though the core
gateway routing system unchanged. However then another metric would
be needed limit route lifetime (by couting the number of router
Budne Expires December 31, 1993 [Page 20]
DRAFT KIP AppleTalk/IP Gateway July 1993
traversals to ``infinity'' or by counting route ``time to live'' down
to zero).
4.14.1. Initial routes
The `atalkad' supplied with KIP 06/88 sends a hopcount of zero for
all routes in the `aaROUTEI' packet (all other versions supply a
hopcount of one), so all initial entries in the routing table will be
one hop away (except for the directly connected LocalTalk, EtherTalk
and UDP/DDP networks).
4.15. AppleTalk Administrator Packet Exchanges
The following tables show AA packet exchanges involving KIP.
4.15.1. restart
This occurs when an user issues the `atalkad boot' command.
`Atalkad' sends an `aaRESTART' to each ``Kbox'' in `/etc/atalkatab'.
AA Host KIP
_______________________
aaRESTART
KIP reboots
4.15.2. KIP boot sequence
On startup KIP requests configuration information from the AppleTalk
Administrator (AA) host by sending minimum length `aaROUTEI' packets
once a minute until it gets a response.
AA Host KIP
_____________________________________
aaCONF (no data)
aaCONF (with data)
followed by either the ``atalkad route sequence'' or ``atalkad route
Budne Expires December 31, 1993 [Page 21]
DRAFT KIP AppleTalk/IP Gateway July 1993
sequence with extension''
4.15.3. atalkad route sequence
The ``atalkad route sequence'' occurs as part of the ``KIP boot
sequence'' or as the result of an `atalkad route' command. The
contents of the AA packet header `flags' field is shown in brackets.
AA Host KIP
______________________
aaROUTEI[0]
aaROUTEQ
4.15.4. atalkad route sequence with extension
The ``atalkad route sequence with extension'' occurs as part of the
``KIP boot sequence'' or as the result of an `atalkad route' command
when the gateway implements the `aaROUTER' and `aaROUTEM' packets and
the `flags' sent with the `aaROUTEI' packet were non-zero.
The contents of the AA packet header `flags' field is shown in
brackets.
AA Host KIP
_____________________________
aaROUTEI[n]
aaROUTER[1]
aaROUTEM[1]
aaROUTER[2]
aaROUTEM[2]
...
...
aaROUTER[n-1]
aaROUTEM[n-1]
aaROUTEQ
4.15.5. `aaZONEQ' exchange
KIP sends ZIP `Query' and `Reply' packets encapsulated in `aaZONEQ'
packets to either the AA host, or other Kboxes to acquire the zone
name for networks reached via UDP/DDP encapsulation.
KIP AA Host or KIP
_______________________________________
aaZONEQ(ZIP Query)
Budne Expires December 31, 1993 [Page 22]
DRAFT KIP AppleTalk/IP Gateway July 1993
aaZONEQ(ZIP Reply)
4.15.6. Core GW exchange
KIP sends RTMP learned ``Local'' routes to Kboxes marked as ``core''
gateways in it's routing table. The core gateway responds with all
UDP/DDP routes not marked as ``from AA''.
KIP KIP Core GW
______________________
aaROUTEQ
aaROUTE
4.16. Rebroadcast Port
KIP accepts UDP packets on port 902 (the `rebPort') if the
destination IP address matches the gateway address (broadcasts are
not accepted, nor are packets rerouted), and passed to the ddpinput
routine for processing based on the embedded DDP destination.
If the packet is a DDP broadcast, KIP will broadcast the packet using
the configured broadcast address as the IP destination, while the
Un*x `atalkrd' server distributed with KIP can be given a list of
addresses (via command line arguments) for forwarding packets.
4.17. `atalkatab'
The Un*x AA server implementation distributed with KIP is called
`atalkad', and the configuration file read by atalkad is called
`atalkatab'.
atalkatab format is best compared to assembly language; each line is
a textual representation of binary structures to be generated and
stored for later retrieval.
4.17.1. route line format
Initial routes and zones to be sent in `aaROUTEI', `aaROUTEM' and
`aaZONEQ' replies are generated by ``route lines'' of the following
format;
net flags ipaddr zone
Where net is the DDP net to be configured. As mentioned earlier,
nets may be represented as a pair of dotted decimal octets, or as a
Budne Expires December 31, 1993 [Page 23]
DRAFT KIP AppleTalk/IP Gateway July 1993
simple decimal integer.
flags is a series of mnemeonic characters which represent values to
``OR'' together to generate the `arouteTuple' flags field;
character(s) bit(s)
_____________________________________
0123 arouteBmask
A arouteHost+arouteAsync
C arouteCore
E arouteKbox+arouteEtalk
K arouteKbox
H arouteHost
N arouteNet
The digits zero through three the corresponding binary value to be
``ORed'' into the flags field (to set the ``Net'' broadcast format).
ipaddr is an IP address to be stored in the `node' field.
4.17.2. Kbox configuration section
Configuration for ``Kboxes'' to be sent in `aaCONF' packets is
represented on whitespace prefixed lines following a K line.
Configuration information is a series of key-characters which control
both the interpretation of the data to follow, and the amount of data
to be stored.
key interpretation size in bytes
_____________________________________________
I Internet host name/addr 4
L Long integer 4
S Short integer 2
%n net config 2
B Byte integer 1
Integer data is interpreted as decimal unless prefixed with the
letter `X', numbers prefixed with a leading zero are interpreted as
octal. Short integers can be entered as dotted pairs.
The pair of characters `%n' has magic properties when it appears at
the data offsets associated with the configuration for each of the
AppleTalk ``ports''; LocalTalk, EtherTalk, and UDP/DDP.
For the LocalTalk port `%n' takes on the value of the net number on
the preceding `K' line. For the EtherTalk port `%n' takes on the
Budne Expires December 31, 1993 [Page 24]
DRAFT KIP AppleTalk/IP Gateway July 1993
value of the net number on the first preceding `E' line where the
ipaddr of the `E' line matches the IP address of the current Kbox.
For the UDP/DDP port `%n' takes on the value of the net number on the
first `H' or `N' line where the top three bytes of the ipaddr of the
`H' or `N' line matches the IP address of the current Kbox.
In addition strings of characters may be entered delimited with
``quote'' character (ASCII 34). Counted ``PASCAL'' strings may be
entered delimited with the ``accent grave'' or ``backquote''
character (ASCII 96).
4.18. Related DDP in IP encapsulations
KIP-style DDP in IP encapsulation has been used in two other
contexts. Both use the same pseudo-LAP header as KIP UDP/DDP, but
use different UDP ports.
4.18.1. UAB ``mKIP'' encapsulation
UAB (Un*x AppleTalk Bridge) is a Phase 1 AppleTalk Router which runs
on Un*x systems and speaks EtherTalk Phase 1. UAB communicates with
CAP client software on the local host (via UDP to the loopback
address) using an encapsulation called ``modified KIP''. Because it
would be impossible to configure CAP with the local host as the
``bridge node'' (both because this would require opening more than
200 Un*x ``sockets'', and because doing so would prevent the clients
from opening any), UAB listens on the UDP port 903 (the `mrebPort'),
for packets from local clients to be routed to EtherTalk.
4.18.2. Point to Point links using RTMP
Cayman and other vendors use KIP style DDP/IP encapsulation on UDP
port 910 to implement point to point ``tunnels'' between gateways.
Phase 2 RTMP and ZIP are sent (to and from DDP net and node zero)
across the ``link'' (as determined by IP source) to exchange routing
and zone information.
Owing to the high update rate of RTMP, it is impractical to create
large fully connected routing systems due to the quadratic number of
links (n^2 - n) and update packets.
5. NBP Filtering
KIP performs three types of NBP based filtering; ``Stay in Zone'',
Budne Expires December 31, 1993 [Page 25]
DRAFT KIP AppleTalk/IP Gateway July 1993
``LaserWriter'', and ``Tilde''.
Note:
5.1. Stay in Zone filtering
``Stay in Zone'' filtering (enabled by the `conf_stayinzone' flag) is
the most restrictive type. If enabled, machines on the gateway
LocalTalk will only be able to access resources within their own zone
through KIP. Access to ANY resource outside this zone will be
prevented.
``Stay in Zone'' filtering is implemented by never sending NBP `LkUp'
requests (when expanding NBP `BrRq' requests) to nets which are not
in the same zone as the LocalTalk port, and by sending empty replies
for ZIP `GetZoneList' requests, so that no zone list appears in the
Macintosh ``chooser''.
5.2. LaserWriter filtering
``LaserWriter filtering'' (enabled by the `conf_laserfilter' flag)
allows free access to LaserWriters in the gateway's LocalTalk zone by
all members of this zone. However machines outside this zone will be
unable to see any LaserWriters behind this Kbox.
``LaserWriter filtering'' is implemented by routing NBP `LkUp-Reply'
packets which contain NBP type `LaserWriter' ONLY if the source net
is in the same zone as the gateway's LocalTalk or the source and
destination nets are both in the gateway's LocalTalk zone.
Note:
Absolute determination of the source and destination
zones from net numbers are only possible in an AppleTalk
Phase 1 environment!
5.3. Tilde filtering
``Tilde filtering'' (enabled by the `conf_tildefilter' flag) is
similar to ``LaserWriter Filtering''. By default, all NBP names will
be accessible outside the gateway LocalTalk zone. However if an NBP
entity name ends in the tilde character ``~'' (e.g. `Our Printer~'),
then this name will no be seen by machines outside of the zone.
Note:
When KIP performs `LaserWriter' and ``Tilde'' filtering
it only looks at the first tuple of the NBP `LkUp-Reply'
Budne Expires December 31, 1993 [Page 26]
DRAFT KIP AppleTalk/IP Gateway July 1993
packet. If the first tuple matches the filtering test,
the entire packet will be dropped. If the first tuple
fails the filtering test the entire packet will be
dropped.
6. Magic `ALL' zone
The zone name `ALL' has magic properties to KIP; it allows CAP hosts
on an Ethernet with one gateway to appear in disparate zones. NBP
`LkUp''s are always sent to nets in zone `ALL', regardless of the
target zone in the `BrRq' packets. KIP will never return the zone
name `ALL' in a ZIP `GetZoneList' reply, so it will never be seen in
a list of zones (ie; Mac ``Chooser'' or CAP `getzones'). Since KIP
always replaces ``*'' with the source zone of the `BrRq' and `atis'
checks the zone on incoming `LkUp''s each CAP host will only appear
in one zone.
7. Gateway Debug protocol
KIP provides for remote examine and deposit of memory locations by
the configured `ipdebug' host via packets sent to UDP port 900 (the
`gwdbPort').
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: gwdbMagic (0xFF068020) :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: op : seq : count :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: address :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: :
/ data /
/ (up to 512 octets) /
: :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
`op' codes for gwdb;
gwdbRead 1 Read memory
gwdbWrite 2 Write memory
gwdbCall 3 Not implemented
Budne Expires December 31, 1993 [Page 27]
DRAFT KIP AppleTalk/IP Gateway July 1993
LBL KIP uses the following op codes:
gwdbStats 4 Return statistics
gwdbState 5 Return configuration
gwdbFrame 6 Return stack frame
Shiva uses the following op code for remote debug with GDB:
gwdbGdb 99
7.1. gwdb Read function
`count' octets starting at `address' in the gateway memory are copied
to `data', and the packet is returned.
7.2. gwdb Write function
`count' octets of data from `data' are copied to `address' in the
gateway memory and the packet is returned unmodified.
7.3. gwdb Call function
KIP does not implement this function! For unimplemented functions
KIP clears the `op' byte and returns the packet.
7.4. gwdb State function
This function is implemented by LBL KIP and K-STAR, and returns
FastPath specific information in `data';
/*
* Structure of data area in a 'state' reply.
*/
struct gwdb_State {
struct fp_version version;
struct fp_state state;
};
7.5. gwdb Stats function
This function is implemented only by LBL KIP.
Budne Expires December 31, 1993 [Page 28]
DRAFT KIP AppleTalk/IP Gateway July 1993
7.6. gwdb Frame function
This function is implemented by LBL KIP and K-STAR and returns the
machine state of the processor; D0-D7, A0-A7, SR (left padded to 32
bits).
7.7. gwdb Gdb function
Shiva uses this function. The following remote gdb commands are
supported:
Command Function Return value
___________________________________________________________________
g return the value of the CPU registers ENN / data
G set the value of the CPU registers ENN / OK
mAA..AA,LLLL Read LLLL octets at address AA..AA ENN / data
MAA..AA,LLLL Write LLLL octets at address AA..AA ENN / OK
c[AA..AA] Continue [at address AA..AA] SNN
s[AA..AA] Step one instruction [from AA..AA] SNN
? What was the last signal? SNN
k kill (ignored)
Where ``AA..AA'', ``LLLL'' and ``NN'' are in hex. ``SNN'' represents
an exception encoded as a Un*x `signal' number NN and ``ENN''
represents an error condition. All returns marked ``data'' are
streams of octets encoded in hexadecimal.
8. DDP/IP encapsulation
Note:
While the Apple-IP Working Group of the IETF is working to
standardize and extend the protocols for IP over AppleTalk,
however no description exists of the historical
implementation.
KIP provides an IP ``forwarding'' capability that allows AppleTalk
nodes appear to be located on the Ethernet by sending ``proxy ARP''
replies for IP addresses in a ``client range''.
The DDP/IP encapsulation protocol consists of three parts;
Encapsulation, Dynamic address assignment, and Address Resolution.
8.1. Encapsulation
IP Datagrams are encapsulated in DDP packets of type 22 with DDP
source and destination sockets of 72.
Budne Expires December 31, 1993 [Page 29]
DRAFT KIP AppleTalk/IP Gateway July 1993
8.2. Address Resolution
KIP uses AppleTalk NBP `LkUp''s to achieve IP address resolution.
This allows routing of IP packets within an AppleTalk zone, without
requiring any changes to intermediate DDP routers within the zone.
Each DDP/IP host must NBP register a tuple of type `IPADDRESS' with
the object name set to the dotted decimal representation of the
host's IP address. This ensures that only one host is using an IP
address at a time, and allows hosts (both Macintoshes and KIP) to
locate each other by address using NBP.
KIP maintains DDP addresses alongside Ethernet addresses in it's ARP
cache. When KIP needs to route an IP packet to a client (static or
dynamic) which does not appear in the cache, it performs an NBP
lookup (as `a.b.c.d:IPADDRESS') in the zone associated with the Kbox
LocalTalk port. Because of this clients must be located in the same
zone as the Kbox.
NBP replies for type `IPADDRESS' are always processed as both ARP
replies and dynamic address confirmations.
8.2.1. NBP Proxy ARP
In order to maintain the illusion that the DDP/IP hosts are located
on Ethernet, KIP must reply in proxy for NBP ARP's for addresses NOT
in the gateway client range (as opposed to on Ethernet where KIP
replies for addresses in the client range) as well as it's own IP
address so that packets for hosts that are really on the Ethernet are
routed via the gateway!
KIP does not reply to NBP ARP's in it's client range to allow clients
to NBP register (which requires first performing a zone wide search
for current users of a name). This would prevent more than one
gateway from operating in the same zone (since one gateway or the
other will reply to any IPADDRESS lookup) however, KIP will only send
replies for lookups of type IPADDRESS if the reply would be routed
via the LocalTalk port.
Some DDP/IP client software attempts to resolve all IP addresses into
a DDP destination using NBP ARP (depending on NBP Proxy ARP Replies
from the gateway), while others will only NBP ARP for addresses which
are on the connected IP network (as determined by it's own IP address
and a (sub)net mask), and route all other packets via a default
gateway on the connected net.
Budne Expires December 31, 1993 [Page 30]
DRAFT KIP AppleTalk/IP Gateway July 1993
8.2.2. DDP ARP
Another method was previously used for DDP/IP IP Address Resolution.
Work done in the summer of 1984 at Dartmouth [Sherman86] treated the
LocalTalk as a distinct IP network, and sent ARP [RFC-826] using DDP
type 23, and hardware type 3 for ``AppleBus''.
This method requires that an entire IP (sub)net be assigned for use
by LocalTalk hosts, and at the same time limits the IP (sub)net to a
single LocalTalk wire. IP addresses on the LocalTalk (sub)net can
either be assigned staticly, or the host's LAP node number can be
used as the IP address host part to provide a dynamic IP address!
The original SEAGate code converted between IP and DDP addresses by
equating the DDP net number and IP subnet numbers.
8.3. Dynamic Address Assignment
So that each potential client need not be configured with an IP
address (and that a large number of clients can share a small pool of
addresses), KIP can perform IP address assignment on an on-demand
basis from a pool of ``dynamic'' addresses.
KIP receives configuration for the number of static and dynamic
clients from atalkatab. Up to 60 dynamic addresses can be
configured. Static client addresses follow directly after the
gateway address, and dynamic addresses follow after the static
addresses.
So that potential dynamic clients can locate the gateway, KIP
responds to NBP `LkUp''s of type `IPGATEWAY' with the dotted decimal
representation of it's address as the object name, and socket number
72. KIP will only respond to lookups of type `IPGATEWAY' if it would
route the reply via it's LocalTalk port. This keeps different Mac's
in the same zone, but behind a different gateway on the same Ethernet
from getting an address from the wrong box!
For each dynamic address, KIP keeps the following three-tuple: `net',
`node', `timer'. Where `net' and `node', is the client's DDP
address, and `timer' counts how many minutes have passed since the
entry has been successfully ``confirmed''. A non-zero `timer' value
Budne Expires December 31, 1993 [Page 31]
DRAFT KIP AppleTalk/IP Gateway July 1993
indicates the entry is in use.
8.3.1. IPGATEWAY Protocol
The protocol used for dynamic address assignment is called IPGP (for
the IPGATEWAY Protocol), and is sent using ATP. KIP processes IPGP
packets received on DDP socket 72 (KIP accepts and replies to both XO
and ALO ATP requests, but provides only ALO service).
8.3.1.1. ipgp packet format
The four ATP ``user bytes'' (in the ATP header) are ignored.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: op :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP address :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP name server :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP broadcast address :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: IP file server :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[0] :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[1] :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[2] :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: ipother[3] :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: :
/ /
/ string (128 octets) /
/ /
: :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8.3.1.2. functions
ipgpAssign 1 Assign new IP address
ipgpName 2 Name lookup
ipgpServer 3 Return just server addresses
Budne Expires December 31, 1993 [Page 32]
DRAFT KIP AppleTalk/IP Gateway July 1993
ipgpRange 4 Return start address and range
ipgpVerify 5 Verify this IP address is mine
Only `ipgpAssign' and `ipgpServer' have ever been implemented by KIP.
If an error occurs processing an IPGP packet, KIP sets `op' to -1
(all ones), and returns a zero terminated error message in the
`string' field. The string `bad op' is returned if the `op' field is
not either `ipgpAssign' or `ipgpServer'.
8.3.1.3. ipgp Assign function
The `ipgpAssign' function attempts to allocate an available dynamic
IP address using the following criteria (in descending preference);
(1)
The lowest IP address for which the saved DDP address associated with
the dynamic IP address matches the DDP source address of the
`ipgpAssign' packet.
(2)
The highest IP address entry that has never been used (ie; `timer' is
zero).
(3)
The oldest entry which is more than five minutes old.
(4)
If no entry has been idle (failed address confirmation) more than
five times, then address assignment fails, and the packet is returned
with `op' set to -1 and `string' is set to `no free address'.
If an address is successfully (re)assigned it will be returned in the
`ipaddress' field of the IPGP packet, the client DDP address is saved
in the dynamic client table, and the entry timer is set to one. The
IPGP `op' field is returned unmodified. The `ipname', `ipbroad',
`ipfile' and `ipother' fields are filled in with data received from
the AA host via an `aaROUTEI' packet.
8.3.1.4. ipgp Server function
The `ipgpServer' function returns the auxiliary data fields returned
by `ipgpAssign' but without assigning an address. This function can
be used by ``static'' clients.
Budne Expires December 31, 1993 [Page 33]
DRAFT KIP AppleTalk/IP Gateway July 1993
8.3.2. reboot and address confirmation
KIP sends NBP `LkUp' packets to locate and confirm users of dynamic
IP address slots.
To provide robustness in case of gateway failure KIP will attempt to
(re)acquire the address associations in use before the gateway
restarted. After configuration is complete KIP waits 25 seconds (to
allow RTMP routes to be established) and it sends out wildcard NBP
`LkUp' packets for type `IPADDRESS' in the zone associated with it's
LocalTalk once a second for five seconds. Incoming NBP packets with
type `IPADDRESS' are passed (as usual) to both NBP ARP input
processing and Dynamic IP Address confirm processing. This reloads
the Dynamic IP Address table with all active users (within the local
zone).
Once KIP has been running for 30 seconds, KIP attempts to ``confirm''
the NBP `IPADDRESS' associated with each dynamic IP address ``slot''
once a minute. Since a maximum of 60 dynamic addresses may be
allocated by KIP, each entry is confirmed on the same ``tick'' of the
second hand, spreading the NBP traffic out. If the aging timer
associated with an entry is zero (an unused entry) or has reached
32767 no confirm is sent.
The confirm packet is an NBP `LkUp' packet (with type object `=' and
zone `*') sent directly to the to the DDP address found in the
dynamic IP address table.
Upon receipt of an NBP reply for an IPADDRESS in the dynamic range
the address confirmation code saves the replying entity's DDP address
in the dynamic client table, and resets the entry timer to one.
9. KIP revision history
Below is an edited revision history for KIP.
9.1. 10/86
Improved IP address management (IPGP + NBP ARP). Centralized
configuration and boot control. Full AppleTalk routing using
NBP/RTMP/ZIP; ``core'' gateway scheme. Gateway debugging via net
ddt. Simple integration with libraries such as CAP/K-HOST. Improved
packet throughput. (Croft)
9.2. 02/87
Bug fixes. (Croft)
Budne Expires December 31, 1993 [Page 34]
DRAFT KIP AppleTalk/IP Gateway July 1993
9.3. 09/87
Implement zones `(aaZONE)' and zone filtering. (Croft and Kim)
9.4. 01/88
Ethertalk support. Magic zone name `ALL'. ATP ZIP support
rewritten. DDP Echo support. atalkad configuration aids. (Kim and
Tappan)
9.5. 06/88
Support for NIC UDP port range. Zone acquisitions are done on RTMP
routes. EtherTalk fixes. Allzones was on for ``unknown'' zones.
(Kim)
10. NIC Assigned UDP ports
The following UDP ports were assigned for UDP/DDP encapsulation in
April of 1988 [RFC-1060].
Port NIC Name Use
_______________________________________________
201 AT-RMTP AppleTalk Routing Maintenance
202 AT-NBP AppleTalk Name Binding
203 AT-3 AppleTalk Unused
204 AT-ECHO AppleTalk Echo
205 AT-5 AppleTalk Unused
206 AT-ZIS AppleTalk Zone Information
207 AT-7 AppleTalk Unused
208 AT-8 AppleTalk Unused
In regular operation RTMP and ZIP are never sent in UDP/DDP packets.
The CAP `getzones' command sends ZIP `GetZoneList' packets to KIP,
but KIP always sends ZIP `Query' commands in `aaZONEQ' packets to
it's AA host and other Kboxes. The NBP and ECHO are ports are served
by `atis' on CAP hosts.
11. Non-NIC Assigned UDP ports:
The following ports are used by KIP, CAP or work-alikes, but have not
been assigned by the Internet Assigned Numbers Authority;
Port(s) Name Use
___________________________________________________________
750 aaBroadPort Async Appletalk broadcast
Budne Expires December 31, 1993 [Page 35]
DRAFT KIP AppleTalk/IP Gateway July 1993
768-895 ddpWKSUnix Old DDP Well-Known socket range
899 FastPath KLAP3 over UDP
900 gwdbPort Gateway Debug Protocol
901 aaPort AA Protocol
902 rebPort UDP/DDP Rebroadcast
903 mrebPort UAB mKIP Rebroadcast
910 RTMP Point-to-Point
16512-16639 ddpNWKSUnix Non-Well-Known DDP Socket range
43520 aaBasePort Async Appletalk base port
12. Programmer's Reference:
The following are the ``C'' data structure declarations used by KIP
for packets described in this memo;
Note:
All data is in ``network'' (native 68000) byte order.
AppleTalk administration packets from AppleTalk administrator host
(AA) or other gateways; configuration / routing information packet.
struct aaconf {
u_long magic; /* magic number aaMagic */
u_char type; /* op code */
u_char flags;
u_short count; /* byte count of 'stuff' */
iaddr_t ipaddr /* IP address of sender */
u_char stuff[512]; /* config info or route tuples */
};
#define aaconfMinSize 12
#define aaPort 901 /* udp port number */
#define aaMagic ((u_long)0xFF068030)
Routing tuple contained in all `aaROUTE*' packets;
struct arouteTuple {
long node; /* IP net or host address */
u_short net; /* atalk net number */
u_char flags; /* flags, see aroute */
u_char hops; /* hop count */
};
Budne Expires December 31, 1993 [Page 36]
DRAFT KIP AppleTalk/IP Gateway July 1993
Configuration information from `aaCONF' packet;
struct conf {
iaddr_t ipbroad; /* IP broadcast addr */
iaddr_t ipname; /* address of name server */
iaddr_t ipdebug; /* address of debug host */
iaddr_t ipfile; /* address of file server */
u_long ipother[4]; /* other addresses for IPGP */
u_short anetet; /* EtherTalk AT net # */
u_short startddpWKS; /* UDP WKS range start */
u_long flags; /* various bit flags */
#define conf_stayinzone 0x1 /* no looking at other zones */
#define conf_laserfilter 0x2 /* NBP filter LaserWriters */
#define conf_tildefilter 0x4 /* NBP filter "name~" */
u_short ipstatic; /* static IP addrs */
u_short ipdynamic; /* dynamic IP addrs */
u_short atneta; /* LocalTalk AT net # */
u_short atnete; /* UDP/DDP AT net # */
u_char spare[16]; /* was once zone info */
};
Gateway debug protocol (via ddt68 on Un*x);
struct gwdb {
u_long magic; /* magic number gwdbMagic */
u_char op,seq; /* op code, sequence number */
u_short count; /* byte count */
u_long address; /* address of read/write */
u_char data[512];
};
#define gwdbMagic ((u_long)0xFF068020)
#define gwdbPort 900 /* udp port number */
/* op codes */
#define gwdbRead 1
#define gwdbWrite 2
#define gwdbCall 3
Budne Expires December 31, 1993 [Page 37]
DRAFT KIP AppleTalk/IP Gateway July 1993
IPGATEWAY protocol ATP packet used by client MacIP programs to
request name assignment and lookup services.
struct IPGP {
u_long op; /* opcode */
long ipaddress; /* my IP address (or lookup reply)*/
long ipname; /* address of my name server */
long ipbroad; /* my broadcast address */
long ipfile; /* my file server */
long ipother[4]; /* other addresses/flags */
char string[128]; /* null terminated error string */
};
#define ipgpMinSize 36
/* op codes */
#define ipgpAssign 1 /* assign new IP address */
#define ipgpName 2 /* name lookup */
#define ipgpServer 3 /* just return my server addresses */
#define ipgpRange 4 /* return start address and range */
#define ipgpVerify 5 /* verify this IP address is mine */
#define ipgpError -1 /* error return; string=message */
13. Author's Note:
Portions of this document were copied from KIP source files covered
by the following copyrights:
(C) 1984, Stanford Univ. SUMEX project.
May be used but not sold without permission.
(C) 1986, Kinetics, Inc.
May be used but not sold without permission.
(C) 1986, Stanford, BBN, Kinetics.
May be used but not sold without permission.
(C) 1986, Stanford Univ. CSLI.
May be used but not sold without permission.
(C) 1986, Stanford Univ. SUMEX project.
May be used but not sold without permission.
Budne Expires December 31, 1993 [Page 38]
DRAFT KIP AppleTalk/IP Gateway July 1993
The following are trademarks;
AppleTalk, EtherTalk, LaserWriter, and LocalTalk are
trademarks of Apple Computer, Inc.
FastPath is a registered trademark of Novell
licensed for use exclusively by Shiva Corporation.
K-STAR is a trademark of Novell
licensed for use exclusively by Shiva Corporation.
Kinetics is a registered trademark of Novell.
Mac and Macintosh are registered trademarks of
Apple Computer, Inc.
Un*x is not a trademark of anyone.
14. References:
[RFC-768]
Postel, J.B., ``User Datagram Protocol'', Information Sciences
Institute, University of Southern California, August 1980.
[RFC-791]
Postel, J.B., ``Internet Protocol'', Information Sciences Institute,
University of Southern California, September 1981.
[RFC-826]
Plummer, D.C. ``Ethernet Address Resolution Protocol'', November
1982.
[RFC-1060]
Reynolds, J., and J. Postel, ``Assigned Numbers'', Information
Sciences Institute, University of Southern California, March 1990.
[Sherman86]
Sherman, M. ``A Network Package for the Macintosh using the DoD
Internet Protocols'', Technical Report PCS-TR86-124, Computer Network
Laboratory, Department of Mathematics and Computer Science, Dartmouth
College.
[Sidhu90]
Sidhu, G., R. Andrews and A. Oppenheimer, ``Inside AppleTalk, Second
Budne Expires December 31, 1993 [Page 39]
DRAFT KIP AppleTalk/IP Gateway July 1993
Edition'', Apple Computer, Inc. May 1990.
15. Acknowledgments:
The author is indebted to the following for their help, input and
documentation; Scot Drysdale of Dartmouth University, Robert Elz of
the University of Melbourne, Tom Evans of Webster Computer, David
Hornsby of the University of Melbourne, Charlie Kim of Apple
(formerly at Columbia University), Philip Koch of Dartmouth
University (now at Apple Computer), Stephen Lewis (formerly of
Kinetics), Josh Littlefield of Cayman, John Norstad of North Western
University, Brad Parker of Cayman, Mark Sherman of Transarc (formerly
at Dartmouth), Michael Swan of Neon Software (formerly of Kinetics),
Dan Tappan (formerly at BB&N), and Jim Warner of UCSD.
And particularly Bill Croft (now at the Institute for Global
Communication) not only for having created SEAGate and KIP, but for
his time spent digging up old documentation, and reviewing this
document!
16. Author's Address:
Philip Budne
Shiva Corporation
1 Cambridge Center
Cambridge, MA 02142
Phone: 617-252-6300
EMail: phil@Shiva.COM
17. Expiration:
This draft document expires December 31, 1993.
Budne Expires December 31, 1993 [Page 40]